// 第11节：查询：find的多条件查询
  /* 
    很多时候我们需要查询的值不只是有一个简单的条件，比如我们现在要查询一下同事中是33岁和25岁的，还比如我们要查询
    同事中大于30岁并且会PHP技能的。MongoDB在这方面也支持的很好，我们来学习一下。
  */

// $in修饰符 (一键多值的查询)
  // in修饰符可以轻松解决一键多值的查询情况。
  // 就如上面我们讲的例子，现在要查询同事中年龄是25岁和33岁的信息。
  /* 
    代码:
    db.workmate.find(
      {
        age:{$in:[25,33]}
      },
      {
        name:1,
        age:1,
        '_id':0,
        'skill.skillOne':1
      }
    )
  */

  /* 
    结果:
    { "name" : "JSPang", "age" : 33, "skill" : { "skillOne" : "HTML+CSS" } }
    { "name" : "XiaoWang", "age" : 25, "skill" : { "skillOne" : "PhotoShop" } }
    { "name" : "HouFei", "age" : 25, "skill" : { "skillOne" : "HTML+CSS" } }
  */

// $nin修饰符
    // 于$in相对的修饰符是$nin，就是查询除了$in条件以为的指
    // 小伙伴们可以自己进行练习一下，这里我就不作过多的演示了。


// $or修饰符 (多个键值的情况)
  /* 
    它用来查询多个键值的情况，就比如查询同事中大于30岁或者会做PHP的信息。
    主要区别是两个Key值。$in修饰符是一个Key值，这个需要去比较记忆。
  */
  //  就比如查询同事中大于30岁或者会做PHP的信息
  /* 
    代码:
    db.workmate.find(
      {
        $or:[
          {age:{$gte:30}},
          {'skill.skillThree':'PHP'}
        ]
      },
      {
        name:true,
        age:true,
        'skill.skillThree':true,
        '_id':false
      }
    )
  */
  /* 
    结果:
    { "name" : "JSPang", "age" : 33, "skill" : { "skillThree" : "PHP" } }
    { "name" : "ShengLei", "age" : 31, "skill" : { "skillThree" : "PPT" } }
    { "name" : "LiuYan", "age" : 35, "skill" : {  } }
    { "name" : "JiaPeng", "age" : 29, "skill" : { "skillThree" : "PHP" } }
    { "name" : "LiJia", "age" : 26, "skill" : { "skillThree" : "PHP" } }
  */
  // or很好理解，就是或者的意思，我们查出来的结果也是一样的，查出了年龄大于30岁的，或者会做PHP的信息

// $nor修饰符
  // 和$or相反


// $and修饰符 (多个key同时满足)
  /* 
    $and用来查找几个key值都满足的情况，比如要查询同事中大于30岁并且会做PHP的信息，这时需要注意的是这两
    项必须全部满足。当然写法还是比较简单的。只要把上面代码中的or换成and就可以了。
  */
  // 比如要查询同事中大于30岁并且会做PHP的信息
  /* 
    代码：
    db.workmate.find(
      {
        $and:[{age:{$gt:30}},{'skill.skillThree':'PHP'}]
      },
      {name:1,age:1,'skill.skillThree':1,'_id':0}
    )
  */
  /* 
    结果:
    { "name" : "JSPang", "age" : 33, "skill" : { "skillThree" : "PHP" } }
  */

// $not修饰符
  /* 
    它用来查询除条件之外的值，比如我们现在要查找除年龄大于20岁，小于30岁的人员信息。
    需要注意的是$not修饰符不能应用在条件语句中，只能在外边进行查询使用。
  */
  // 查找除年龄大于20岁，小于30岁的人员信息
  /* 
    代码:
    db.workmate.find({age:{$not:{$lte:30,$gte:20}}},{name:1,age:1,'_id':0})
  */
  /* 
    结果:
    { "name" : "JSPang", "age" : 33 }
    { "name" : "ShengLei", "age" : 31 }
    { "name" : "MinJie", "age" : 18 }
    { "name" : "LiuYan", "age" : 35 }
  */

  /* 
    总结：这节课的知识比较简单，但是要区分记忆，很容易搞混。幸运的是这里已经为你准备好了学习笔记。当你忘记的时候过来看看吧。
  */

  /* 
    个人练习
    1. 大于30岁,并且会PHP,列出人名和其他信息
    // db.workmate.find({$and:[{age:{$gt:30}},{'skill.skillThree':'PHP'}]},{name:1,age:1,'_id':0,'skill.skillThree':1})
    
    2. 大于20岁的
    // db.workmate.find({age:{$gt:20}},{name:1,age:1,'_id':0})

    3. 大于20岁,或者会HTML+CSS技术的

  
  */
